package net.jcip.examples.chapter6.thread.ExecutorService.ExecutorServiceImpl;


import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * ✅ 特点
 * 	•	线程数固定；
 * 	•	超出的任务会放入 无界队列；
 * 	•	适用于 负载稳定、任务量固定 的场景；
 * 	•	不会频繁创建/销毁线程，减少开销。
 *
 * 📌 使用场景
 * 	•	服务器稳定的业务线程池；
 * 	•	执行固定数量的后台任务；
 * 	•	CPU 密集型任务推荐使用。
 */
public class FixedThreadPoolTest {

    public static void main(String[] args) {
        //不会抛出异常，也不会拒绝任务，因为队列是无界的（理论上可以存放无限任务）。
        //由于 LinkedBlockingQueue 是无界队列，如果提交任务的速度 > 执行任务的速度，
        //队列会越积越多，最终可能导致：
        //  •	内存占用过高
        //	•	OOM（OutOfMemoryError）
        ExecutorService executor = Executors.newFixedThreadPool(3); // 固定3个线程

        for (int i = 0; i < 10; i++) {
            int taskId = i;
            executor.submit(() -> {
                System.out.println(Thread.currentThread().getName() + " 执行任务 " + taskId);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            });
        }

        executor.shutdown(); // 关闭线程池
    }


}
